// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by sidekick. DO NOT EDIT.

/// A dyn-compatible, crate-private version of [super::ContactCenterInsights].
#[async_trait::async_trait]
pub trait ContactCenterInsights: std::fmt::Debug + Send + Sync {
    async fn create_conversation(
        &self,
        req: crate::model::CreateConversationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Conversation>>;

    async fn upload_conversation(
        &self,
        req: crate::model::UploadConversationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_conversation(
        &self,
        req: crate::model::UpdateConversationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Conversation>>;

    async fn get_conversation(
        &self,
        req: crate::model::GetConversationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Conversation>>;

    async fn list_conversations(
        &self,
        req: crate::model::ListConversationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListConversationsResponse>>;

    async fn delete_conversation(
        &self,
        req: crate::model::DeleteConversationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn create_analysis(
        &self,
        req: crate::model::CreateAnalysisRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn get_analysis(
        &self,
        req: crate::model::GetAnalysisRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Analysis>>;

    async fn list_analyses(
        &self,
        req: crate::model::ListAnalysesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListAnalysesResponse>>;

    async fn delete_analysis(
        &self,
        req: crate::model::DeleteAnalysisRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn bulk_analyze_conversations(
        &self,
        req: crate::model::BulkAnalyzeConversationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn bulk_delete_conversations(
        &self,
        req: crate::model::BulkDeleteConversationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn ingest_conversations(
        &self,
        req: crate::model::IngestConversationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn export_insights_data(
        &self,
        req: crate::model::ExportInsightsDataRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn create_issue_model(
        &self,
        req: crate::model::CreateIssueModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_issue_model(
        &self,
        req: crate::model::UpdateIssueModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::IssueModel>>;

    async fn get_issue_model(
        &self,
        req: crate::model::GetIssueModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::IssueModel>>;

    async fn list_issue_models(
        &self,
        req: crate::model::ListIssueModelsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListIssueModelsResponse>>;

    async fn delete_issue_model(
        &self,
        req: crate::model::DeleteIssueModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn deploy_issue_model(
        &self,
        req: crate::model::DeployIssueModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn undeploy_issue_model(
        &self,
        req: crate::model::UndeployIssueModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn export_issue_model(
        &self,
        req: crate::model::ExportIssueModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn import_issue_model(
        &self,
        req: crate::model::ImportIssueModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn get_issue(
        &self,
        req: crate::model::GetIssueRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Issue>>;

    async fn list_issues(
        &self,
        req: crate::model::ListIssuesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListIssuesResponse>>;

    async fn update_issue(
        &self,
        req: crate::model::UpdateIssueRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Issue>>;

    async fn delete_issue(
        &self,
        req: crate::model::DeleteIssueRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn calculate_issue_model_stats(
        &self,
        req: crate::model::CalculateIssueModelStatsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::CalculateIssueModelStatsResponse>>;

    async fn create_phrase_matcher(
        &self,
        req: crate::model::CreatePhraseMatcherRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::PhraseMatcher>>;

    async fn get_phrase_matcher(
        &self,
        req: crate::model::GetPhraseMatcherRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::PhraseMatcher>>;

    async fn list_phrase_matchers(
        &self,
        req: crate::model::ListPhraseMatchersRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListPhraseMatchersResponse>>;

    async fn delete_phrase_matcher(
        &self,
        req: crate::model::DeletePhraseMatcherRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn update_phrase_matcher(
        &self,
        req: crate::model::UpdatePhraseMatcherRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::PhraseMatcher>>;

    async fn calculate_stats(
        &self,
        req: crate::model::CalculateStatsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::CalculateStatsResponse>>;

    async fn get_settings(
        &self,
        req: crate::model::GetSettingsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Settings>>;

    async fn update_settings(
        &self,
        req: crate::model::UpdateSettingsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Settings>>;

    async fn create_analysis_rule(
        &self,
        req: crate::model::CreateAnalysisRuleRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::AnalysisRule>>;

    async fn get_analysis_rule(
        &self,
        req: crate::model::GetAnalysisRuleRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::AnalysisRule>>;

    async fn list_analysis_rules(
        &self,
        req: crate::model::ListAnalysisRulesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListAnalysisRulesResponse>>;

    async fn update_analysis_rule(
        &self,
        req: crate::model::UpdateAnalysisRuleRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::AnalysisRule>>;

    async fn delete_analysis_rule(
        &self,
        req: crate::model::DeleteAnalysisRuleRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn get_encryption_spec(
        &self,
        req: crate::model::GetEncryptionSpecRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::EncryptionSpec>>;

    async fn initialize_encryption_spec(
        &self,
        req: crate::model::InitializeEncryptionSpecRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn create_view(
        &self,
        req: crate::model::CreateViewRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::View>>;

    async fn get_view(
        &self,
        req: crate::model::GetViewRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::View>>;

    async fn list_views(
        &self,
        req: crate::model::ListViewsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListViewsResponse>>;

    async fn update_view(
        &self,
        req: crate::model::UpdateViewRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::View>>;

    async fn delete_view(
        &self,
        req: crate::model::DeleteViewRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn query_metrics(
        &self,
        req: crate::model::QueryMetricsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn create_qa_question(
        &self,
        req: crate::model::CreateQaQuestionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaQuestion>>;

    async fn get_qa_question(
        &self,
        req: crate::model::GetQaQuestionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaQuestion>>;

    async fn update_qa_question(
        &self,
        req: crate::model::UpdateQaQuestionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaQuestion>>;

    async fn delete_qa_question(
        &self,
        req: crate::model::DeleteQaQuestionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_qa_questions(
        &self,
        req: crate::model::ListQaQuestionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListQaQuestionsResponse>>;

    async fn create_qa_scorecard(
        &self,
        req: crate::model::CreateQaScorecardRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaScorecard>>;

    async fn get_qa_scorecard(
        &self,
        req: crate::model::GetQaScorecardRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaScorecard>>;

    async fn update_qa_scorecard(
        &self,
        req: crate::model::UpdateQaScorecardRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaScorecard>>;

    async fn delete_qa_scorecard(
        &self,
        req: crate::model::DeleteQaScorecardRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_qa_scorecards(
        &self,
        req: crate::model::ListQaScorecardsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListQaScorecardsResponse>>;

    async fn create_qa_scorecard_revision(
        &self,
        req: crate::model::CreateQaScorecardRevisionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaScorecardRevision>>;

    async fn get_qa_scorecard_revision(
        &self,
        req: crate::model::GetQaScorecardRevisionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaScorecardRevision>>;

    async fn tune_qa_scorecard_revision(
        &self,
        req: crate::model::TuneQaScorecardRevisionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn deploy_qa_scorecard_revision(
        &self,
        req: crate::model::DeployQaScorecardRevisionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaScorecardRevision>>;

    async fn undeploy_qa_scorecard_revision(
        &self,
        req: crate::model::UndeployQaScorecardRevisionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaScorecardRevision>>;

    async fn delete_qa_scorecard_revision(
        &self,
        req: crate::model::DeleteQaScorecardRevisionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_qa_scorecard_revisions(
        &self,
        req: crate::model::ListQaScorecardRevisionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListQaScorecardRevisionsResponse>>;

    async fn create_feedback_label(
        &self,
        req: crate::model::CreateFeedbackLabelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::FeedbackLabel>>;

    async fn list_feedback_labels(
        &self,
        req: crate::model::ListFeedbackLabelsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListFeedbackLabelsResponse>>;

    async fn get_feedback_label(
        &self,
        req: crate::model::GetFeedbackLabelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::FeedbackLabel>>;

    async fn update_feedback_label(
        &self,
        req: crate::model::UpdateFeedbackLabelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::FeedbackLabel>>;

    async fn delete_feedback_label(
        &self,
        req: crate::model::DeleteFeedbackLabelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_all_feedback_labels(
        &self,
        req: crate::model::ListAllFeedbackLabelsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListAllFeedbackLabelsResponse>>;

    async fn bulk_upload_feedback_labels(
        &self,
        req: crate::model::BulkUploadFeedbackLabelsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn bulk_download_feedback_labels(
        &self,
        req: crate::model::BulkDownloadFeedbackLabelsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>>;

    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy>;

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy>;
}

/// All implementations of [super::ContactCenterInsights] also implement [ContactCenterInsights].
#[async_trait::async_trait]
impl<T: super::ContactCenterInsights> ContactCenterInsights for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn create_conversation(
        &self,
        req: crate::model::CreateConversationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Conversation>> {
        T::create_conversation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn upload_conversation(
        &self,
        req: crate::model::UploadConversationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::upload_conversation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_conversation(
        &self,
        req: crate::model::UpdateConversationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Conversation>> {
        T::update_conversation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_conversation(
        &self,
        req: crate::model::GetConversationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Conversation>> {
        T::get_conversation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_conversations(
        &self,
        req: crate::model::ListConversationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListConversationsResponse>> {
        T::list_conversations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_conversation(
        &self,
        req: crate::model::DeleteConversationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_conversation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_analysis(
        &self,
        req: crate::model::CreateAnalysisRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_analysis(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_analysis(
        &self,
        req: crate::model::GetAnalysisRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Analysis>> {
        T::get_analysis(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_analyses(
        &self,
        req: crate::model::ListAnalysesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListAnalysesResponse>> {
        T::list_analyses(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_analysis(
        &self,
        req: crate::model::DeleteAnalysisRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_analysis(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn bulk_analyze_conversations(
        &self,
        req: crate::model::BulkAnalyzeConversationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::bulk_analyze_conversations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn bulk_delete_conversations(
        &self,
        req: crate::model::BulkDeleteConversationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::bulk_delete_conversations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn ingest_conversations(
        &self,
        req: crate::model::IngestConversationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::ingest_conversations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn export_insights_data(
        &self,
        req: crate::model::ExportInsightsDataRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::export_insights_data(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_issue_model(
        &self,
        req: crate::model::CreateIssueModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_issue_model(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_issue_model(
        &self,
        req: crate::model::UpdateIssueModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::IssueModel>> {
        T::update_issue_model(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_issue_model(
        &self,
        req: crate::model::GetIssueModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::IssueModel>> {
        T::get_issue_model(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_issue_models(
        &self,
        req: crate::model::ListIssueModelsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListIssueModelsResponse>> {
        T::list_issue_models(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_issue_model(
        &self,
        req: crate::model::DeleteIssueModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_issue_model(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn deploy_issue_model(
        &self,
        req: crate::model::DeployIssueModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::deploy_issue_model(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn undeploy_issue_model(
        &self,
        req: crate::model::UndeployIssueModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::undeploy_issue_model(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn export_issue_model(
        &self,
        req: crate::model::ExportIssueModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::export_issue_model(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn import_issue_model(
        &self,
        req: crate::model::ImportIssueModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::import_issue_model(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_issue(
        &self,
        req: crate::model::GetIssueRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Issue>> {
        T::get_issue(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_issues(
        &self,
        req: crate::model::ListIssuesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListIssuesResponse>> {
        T::list_issues(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_issue(
        &self,
        req: crate::model::UpdateIssueRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Issue>> {
        T::update_issue(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_issue(
        &self,
        req: crate::model::DeleteIssueRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_issue(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn calculate_issue_model_stats(
        &self,
        req: crate::model::CalculateIssueModelStatsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::CalculateIssueModelStatsResponse>>
    {
        T::calculate_issue_model_stats(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_phrase_matcher(
        &self,
        req: crate::model::CreatePhraseMatcherRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::PhraseMatcher>> {
        T::create_phrase_matcher(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_phrase_matcher(
        &self,
        req: crate::model::GetPhraseMatcherRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::PhraseMatcher>> {
        T::get_phrase_matcher(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_phrase_matchers(
        &self,
        req: crate::model::ListPhraseMatchersRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListPhraseMatchersResponse>> {
        T::list_phrase_matchers(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_phrase_matcher(
        &self,
        req: crate::model::DeletePhraseMatcherRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_phrase_matcher(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_phrase_matcher(
        &self,
        req: crate::model::UpdatePhraseMatcherRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::PhraseMatcher>> {
        T::update_phrase_matcher(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn calculate_stats(
        &self,
        req: crate::model::CalculateStatsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::CalculateStatsResponse>> {
        T::calculate_stats(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_settings(
        &self,
        req: crate::model::GetSettingsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Settings>> {
        T::get_settings(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_settings(
        &self,
        req: crate::model::UpdateSettingsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Settings>> {
        T::update_settings(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_analysis_rule(
        &self,
        req: crate::model::CreateAnalysisRuleRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::AnalysisRule>> {
        T::create_analysis_rule(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_analysis_rule(
        &self,
        req: crate::model::GetAnalysisRuleRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::AnalysisRule>> {
        T::get_analysis_rule(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_analysis_rules(
        &self,
        req: crate::model::ListAnalysisRulesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListAnalysisRulesResponse>> {
        T::list_analysis_rules(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_analysis_rule(
        &self,
        req: crate::model::UpdateAnalysisRuleRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::AnalysisRule>> {
        T::update_analysis_rule(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_analysis_rule(
        &self,
        req: crate::model::DeleteAnalysisRuleRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_analysis_rule(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_encryption_spec(
        &self,
        req: crate::model::GetEncryptionSpecRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::EncryptionSpec>> {
        T::get_encryption_spec(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn initialize_encryption_spec(
        &self,
        req: crate::model::InitializeEncryptionSpecRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::initialize_encryption_spec(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_view(
        &self,
        req: crate::model::CreateViewRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::View>> {
        T::create_view(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_view(
        &self,
        req: crate::model::GetViewRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::View>> {
        T::get_view(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_views(
        &self,
        req: crate::model::ListViewsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListViewsResponse>> {
        T::list_views(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_view(
        &self,
        req: crate::model::UpdateViewRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::View>> {
        T::update_view(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_view(
        &self,
        req: crate::model::DeleteViewRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_view(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn query_metrics(
        &self,
        req: crate::model::QueryMetricsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::query_metrics(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_qa_question(
        &self,
        req: crate::model::CreateQaQuestionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaQuestion>> {
        T::create_qa_question(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_qa_question(
        &self,
        req: crate::model::GetQaQuestionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaQuestion>> {
        T::get_qa_question(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_qa_question(
        &self,
        req: crate::model::UpdateQaQuestionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaQuestion>> {
        T::update_qa_question(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_qa_question(
        &self,
        req: crate::model::DeleteQaQuestionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_qa_question(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_qa_questions(
        &self,
        req: crate::model::ListQaQuestionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListQaQuestionsResponse>> {
        T::list_qa_questions(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_qa_scorecard(
        &self,
        req: crate::model::CreateQaScorecardRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaScorecard>> {
        T::create_qa_scorecard(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_qa_scorecard(
        &self,
        req: crate::model::GetQaScorecardRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaScorecard>> {
        T::get_qa_scorecard(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_qa_scorecard(
        &self,
        req: crate::model::UpdateQaScorecardRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaScorecard>> {
        T::update_qa_scorecard(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_qa_scorecard(
        &self,
        req: crate::model::DeleteQaScorecardRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_qa_scorecard(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_qa_scorecards(
        &self,
        req: crate::model::ListQaScorecardsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListQaScorecardsResponse>> {
        T::list_qa_scorecards(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_qa_scorecard_revision(
        &self,
        req: crate::model::CreateQaScorecardRevisionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaScorecardRevision>> {
        T::create_qa_scorecard_revision(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_qa_scorecard_revision(
        &self,
        req: crate::model::GetQaScorecardRevisionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaScorecardRevision>> {
        T::get_qa_scorecard_revision(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn tune_qa_scorecard_revision(
        &self,
        req: crate::model::TuneQaScorecardRevisionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::tune_qa_scorecard_revision(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn deploy_qa_scorecard_revision(
        &self,
        req: crate::model::DeployQaScorecardRevisionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaScorecardRevision>> {
        T::deploy_qa_scorecard_revision(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn undeploy_qa_scorecard_revision(
        &self,
        req: crate::model::UndeployQaScorecardRevisionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QaScorecardRevision>> {
        T::undeploy_qa_scorecard_revision(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_qa_scorecard_revision(
        &self,
        req: crate::model::DeleteQaScorecardRevisionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_qa_scorecard_revision(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_qa_scorecard_revisions(
        &self,
        req: crate::model::ListQaScorecardRevisionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListQaScorecardRevisionsResponse>>
    {
        T::list_qa_scorecard_revisions(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_feedback_label(
        &self,
        req: crate::model::CreateFeedbackLabelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::FeedbackLabel>> {
        T::create_feedback_label(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_feedback_labels(
        &self,
        req: crate::model::ListFeedbackLabelsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListFeedbackLabelsResponse>> {
        T::list_feedback_labels(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_feedback_label(
        &self,
        req: crate::model::GetFeedbackLabelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::FeedbackLabel>> {
        T::get_feedback_label(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_feedback_label(
        &self,
        req: crate::model::UpdateFeedbackLabelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::FeedbackLabel>> {
        T::update_feedback_label(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_feedback_label(
        &self,
        req: crate::model::DeleteFeedbackLabelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_feedback_label(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_all_feedback_labels(
        &self,
        req: crate::model::ListAllFeedbackLabelsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListAllFeedbackLabelsResponse>> {
        T::list_all_feedback_labels(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn bulk_upload_feedback_labels(
        &self,
        req: crate::model::BulkUploadFeedbackLabelsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::bulk_upload_feedback_labels(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn bulk_download_feedback_labels(
        &self,
        req: crate::model::BulkDownloadFeedbackLabelsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::bulk_download_feedback_labels(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>> {
        T::list_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::get_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::cancel_operation(self, req, options).await
    }

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy> {
        T::get_polling_error_policy(self, options)
    }

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy> {
        T::get_polling_backoff_policy(self, options)
    }
}
